'''
Created on 19/08/2012

@author: Nrai
'''
import os
import sys
from src.ex import paletteexceptions
from validatepalette import validate_palette, get_ptype


PATH = "C://Documents and Settings//Nrai//Escritorio//"

def encode_palette(palette, filename):
    '''
        Encodes a string or list of colors into a palette file.
        The filename parameter should include the extension, "myplt.act"
        
        The palette provided will be validated against the extension.
        
        Returns the absolute path to the newly created palette file.
    '''
    
    fext = filename.split(".")[1]   #extract the extension from the name
    if validate_palette(palette, fext):
        pfilename = os.path.join(PATH, filename)
        encoder = getattr (sys.modules[__name__], 
                           "{p}_to_file".format(p = get_ptype(palette)))
        return encoder(palette, pfilename)


def str_to_file(ustring, pfilename):
    
    '''
        Writes a string into a palette file.
    '''
    
    try:
        pfile = open(pfilename, "w")
    except IOError, error:
        raise IOError, "Filename %s could not be created. %s" % (
                                                                 pfilename,
                                                                 error
                                                                 )
    try:
        pfile.write(ustring)
    except IOError, error:
        raise IOError, "Error writing to %s. %s" % (
                                                    pfilename,
                                                    error
                                                    )
    pfile.close()
    return pfilename

def list_to_file(clist, pfilename):
    
    '''
        Converts a list of colors into a string and writes it
        into a file.
    '''
    
    encoded_string = ''.join([''.join([chr(channel) for channel in color]) for color in clist])
   
    return str_to_file(encoded_string, pfilename)


if __name__ == "__main__":
    clist = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128], [128, 0, 128], [0, 128, 128], [192, 192, 192], [192, 220, 192], [166, 202, 240], [172, 172, 172], [188, 188, 188], [204, 204, 204], [220, 220, 220], [236, 236, 236], [252, 252, 252], [64, 0, 0], [102, 4, 4], [102, 51, 48], [140, 8, 8], [133, 59, 55], [178, 12, 12], [164, 67, 62], [216, 16, 16], [195, 76, 70], [225, 48, 45], [255, 20, 20], [255, 54, 54], [255, 88, 88], [255, 123, 123], [255, 157, 157], [255, 192, 192], [64, 16, 0], [102, 25, 4], [102, 62, 48], [140, 35, 8], [133, 75, 55], [178, 44, 12], [164, 88, 62], [216, 54, 16], [195, 102, 70], [225, 83, 45], [255, 64, 20], [255, 92, 54], [255, 121, 88], [255, 150, 123], [255, 179, 157], [255, 208, 192], [64, 32, 0], [102, 51, 4], [102, 77, 48], [140, 70, 8], [133, 97, 55], [178, 89, 12], [164, 116, 62], [216, 108, 16], [195, 136, 70], [225, 132, 45], [255, 128, 20], [255, 147, 54], [255, 166, 88], [255, 185, 123], [255, 204, 157], [255, 224, 192], [64, 48, 0], [102, 76, 4], [102, 92, 48], [140, 105, 8], [133, 118, 55], [178, 134, 12], [164, 144, 62], [216, 163, 16], [195, 170, 70], [225, 181, 45], [255, 192, 20], [255, 203, 54], [255, 214, 88], [255, 225, 123], [255, 236, 157], [255, 248, 192], [64, 64, 0], [102, 102, 4], [95, 102, 48], [140, 140, 8], [123, 133, 55], [178, 178, 12], [150, 164, 62], [216, 216, 16], [178, 195, 70], [216, 225, 45], [255, 255, 20], [255, 255, 54], [255, 255, 88], [255, 255, 123], [255, 255, 157], [255, 255, 192], [16, 64, 0], [11, 102, 4], [62, 102, 58], [22, 140, 8], [74, 133, 70], [33, 178, 12], [89, 164, 81], [52, 216, 16], [105, 195, 93], [120, 225, 56], [64, 255, 20], [91, 255, 54], [118, 255, 88], [145, 255, 123], [172, 255, 157], [200, 255, 192], [0, 64, 48], [4, 102, 76], [48, 101, 92], [8, 140, 105], [55, 131, 118], [12, 178, 134], [62, 161, 144], [16, 216, 163], [70, 191, 170], [45, 223, 181], [20, 255, 192], [54, 255, 203], [88, 255, 214], [123, 255, 225], [157, 255, 236], [192, 255, 248], [0, 56, 64], [4, 89, 102], [48, 93, 102], [8, 123, 140], [55, 120, 133], [12, 156, 178], [62, 147, 164], [16, 190, 216], [70, 174, 195], [45, 199, 225], [20, 224, 255], [54, 229, 255], [88, 234, 255], [123, 240, 255], [157, 246, 255], [192, 252, 255], [0, 48, 64], [4, 76, 102], [48, 84, 102], [8, 105, 140], [55, 107, 133], [12, 134, 178], [62, 130, 164], [16, 163, 216], [70, 153, 195], [45, 172, 225], [20, 192, 255], [54, 201, 255], [88, 210, 255], [123, 220, 255], [157, 230, 255], [192, 240, 255], [0, 32, 64], [4, 51, 102], [48, 69, 102], [8, 70, 140], [55, 86, 133], [12, 89, 178], [62, 102, 164], [16, 108, 216], [70, 119, 195], [45, 123, 225], [20, 128, 255], [54, 147, 255], [88, 166, 255], [123, 185, 255], [157, 204, 255], [192, 224, 255], [0, 16, 64], [4, 25, 102], [54, 55, 102], [8, 35, 140], [64, 66, 133], [12, 44, 178], [74, 76, 164], [16, 54, 216], [84, 87, 195], [52, 75, 225], [20, 64, 255], [54, 92, 255], [88, 121, 255], [123, 150, 255], [157, 179, 255], [192, 208, 255], [32, 0, 64], [51, 4, 102], [81, 48, 99], [70, 8, 140], [102, 55, 128], [89, 12, 178], [123, 62, 157], [108, 16, 216], [144, 70, 187], [136, 45, 221], [128, 20, 255], [147, 54, 255], [166, 88, 255], [185, 123, 255], [204, 157, 255], [224, 192, 255], [64, 0, 48], [102, 4, 76], [102, 48, 81], [140, 8, 105], [133, 55, 102], [178, 12, 134], [164, 62, 123], [216, 16, 163], [195, 70, 144], [225, 45, 168], [255, 20, 192], [255, 54, 200], [255, 88, 208], [255, 123, 216], [255, 157, 224], [255, 192, 232], [64, 0, 32], [102, 4, 38], [102, 48, 55], [140, 8, 44], [133, 55, 66], [178, 12, 51], [164, 62, 76], [216, 16, 57], [195, 70, 87], [225, 45, 75], [255, 20, 64], [255, 54, 92], [255, 88, 121], [255, 123, 150], [255, 157, 179], [255, 192, 208], [4, 4, 4], [32, 32, 32], [60, 60, 60], [88, 88, 88], [116, 116, 116], [144, 144, 144], [255, 251, 240], [160, 160, 164], [128, 128, 128], [255, 0, 0], [0, 255, 0], [255, 255, 0], [0, 0, 255], [255, 0, 255], [0, 255, 255], [255, 255, 255]]
    string = "\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x80\x00\x00\x00\x80\x80\x00\x80\x00\x80\x80\xc0\xc0\xc0\xc0\xdc\xc0\xa6\xca\xf0\xac\xac\xac\xbc\xbc\xbc\xcc\xcc\xcc\xdc\xdc\xdc\xec\xec\xec\xfc\xfc\xfc@\x00\x00f\x04\x04f30\x8c\x08\x08\x85;7\xb2\x0c\x0c\xa4C>\xd8\x10\x10\xc3LF\xe10-\xff\x14\x14\xff66\xffXX\xff{{\xff\x9d\x9d\xff\xc0\xc0@\x10\x00f\x19\x04f>0\x8c#\x08\x85K7\xb2,\x0c\xa4X>\xd86\x10\xc3fF\xe1S-\xff@\x14\xff\\6\xffyX\xff\x96{\xff\xb3\x9d\xff\xd0\xc0@ \x00f3\x04fM0\x8cF\x08\x85a7\xb2Y\x0c\xa4t>\xd8l\x10\xc3\x88F\xe1\x84-\xff\x80\x14\xff\x936\xff\xa6X\xff\xb9{\xff\xcc\x9d\xff\xe0\xc0@0\x00fL\x04f\\0\x8ci\x08\x85v7\xb2\x86\x0c\xa4\x90>\xd8\xa3\x10\xc3\xaaF\xe1\xb5-\xff\xc0\x14\xff\xcb6\xff\xd6X\xff\xe1{\xff\xec\x9d\xff\xf8\xc0@@\x00ff\x04_f0\x8c\x8c\x08{\x857\xb2\xb2\x0c\x96\xa4>\xd8\xd8\x10\xb2\xc3F\xd8\xe1-\xff\xff\x14\xff\xff6\xff\xffX\xff\xff{\xff\xff\x9d\xff\xff\xc0\x10@\x00\x0bf\x04>f:\x16\x8c\x08J\x85F!\xb2\x0cY\xa4Q4\xd8\x10i\xc3]x\xe18@\xff\x14[\xff6v\xffX\x91\xff{\xac\xff\x9d\xc8\xff\xc0\x00@0\x04fL0e\\\x08\x8ci7\x83v\x0c\xb2\x86>\xa1\x90\x10\xd8\xa3F\xbf\xaa-\xdf\xb5\x14\xff\xc06\xff\xcbX\xff\xd6{\xff\xe1\x9d\xff\xec\xc0\xff\xf8\x008@\x04Yf0]f\x08{\x8c7x\x85\x0c\x9c\xb2>\x93\xa4\x10\xbe\xd8F\xae\xc3-\xc7\xe1\x14\xe0\xff6\xe5\xffX\xea\xff{\xf0\xff\x9d\xf6\xff\xc0\xfc\xff\x000@\x04Lf0Tf\x08i\x8c7k\x85\x0c\x86\xb2>\x82\xa4\x10\xa3\xd8F\x99\xc3-\xac\xe1\x14\xc0\xff6\xc9\xffX\xd2\xff{\xdc\xff\x9d\xe6\xff\xc0\xf0\xff\x00 @\x043f0Ef\x08F\x8c7V\x85\x0cY\xb2>f\xa4\x10l\xd8Fw\xc3-{\xe1\x14\x80\xff6\x93\xffX\xa6\xff{\xb9\xff\x9d\xcc\xff\xc0\xe0\xff\x00\x10@\x04\x19f67f\x08#\x8c@B\x85\x0c,\xb2JL\xa4\x106\xd8TW\xc34K\xe1\x14@\xff6\\\xffXy\xff{\x96\xff\x9d\xb3\xff\xc0\xd0\xff \x00@3\x04fQ0cF\x08\x8cf7\x80Y\x0c\xb2{>\x9dl\x10\xd8\x90F\xbb\x88-\xdd\x80\x14\xff\x936\xff\xa6X\xff\xb9{\xff\xcc\x9d\xff\xe0\xc0\xff@\x000f\x04Lf0Q\x8c\x08i\x857f\xb2\x0c\x86\xa4>{\xd8\x10\xa3\xc3F\x90\xe1-\xa8\xff\x14\xc0\xff6\xc8\xffX\xd0\xff{\xd8\xff\x9d\xe0\xff\xc0\xe8@\x00 f\x04&f07\x8c\x08,\x857B\xb2\x0c3\xa4>L\xd8\x109\xc3FW\xe1-K\xff\x14@\xff6\\\xffXy\xff{\x96\xff\x9d\xb3\xff\xc0\xd0\x04\x04\x04   <<<XXXttt\x90\x90\x90\xff\xfb\xf0\xa0\xa0\xa4\x80\x80\x80\xff\x00\x00\x00\xff\x00\xff\xff\x00\x00\x00\xff\xff\x00\xff\x00\xff\xff\xff\xff\xff"
    tpal = "\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80\x00\x80\x80"
    filename = "test.act"
    print encode_palette(clist, filename)